home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / gtlayout-source.lha / gtlayout_defines.h < prev    next >
C/C++ Source or Header  |  1995-09-25  |  21KB  |  956 lines

  1. /*  GadTools layout toolkit
  2. **
  3. **  Copyright © 1993-1995 by Olaf `Olsen' Barthel
  4. **  Freely distributable.
  5. */
  6.  
  7. #ifndef _GTLAYOUT_DEFINES_H
  8. #define _GTLAYOUT_DEFINES_H 1
  9.  
  10.     // Debugging stuff
  11.  
  12. #ifdef DEBUG
  13. #define DB(x)    x
  14. #else
  15. #define DB(x)    ;
  16. #endif    /* DEBUG */
  17.  
  18.     // Keep this one handy
  19.  
  20. VOID __stdargs    kprintf(STRPTR,...);
  21.  
  22. /*****************************************************************************/
  23.  
  24.  
  25.     // Keyboard qualifiers
  26.  
  27. #define QUALIFIER_SHIFT     (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)
  28. #define QUALIFIER_ALT        (IEQUALIFIER_LALT | IEQUALIFIER_RALT)
  29. #define QUALIFIER_CONTROL    (IEQUALIFIER_CONTROL)
  30.  
  31.  
  32. /*****************************************************************************/
  33.  
  34.  
  35.     // Undefine these to remove various chunks of support from this code
  36.  
  37. #ifdef _GTLAYOUT_GLOBAL_H
  38. #define DO_PASSWORD_KIND
  39. #define DO_FRACTION_KIND
  40. #define DO_GAUGE_KIND
  41. #define DO_TAPEDECK_KIND
  42. #define DO_HEXHOOK
  43. #define DO_PICKSHORTCUTS
  44. #define DO_CLONING
  45. #define DO_LEVEL_KIND
  46. #define DO_BOOPSI_KIND
  47. #define DO_MENUS
  48. #define DO_POPUP_KIND
  49. #define DO_TAB_KIND
  50. #else
  51. #define DO_PASSWORD_KIND
  52. #define DO_FRACTION_KIND
  53. #define DO_GAUGE_KIND
  54. #define DO_TAPEDECK_KIND
  55. #define DO_HEXHOOK
  56. #define DO_PICKSHORTCUTS
  57. #define DO_CLONING
  58. #define DO_LEVEL_KIND
  59. #define DO_BOOPSI_KIND
  60. #define DO_MENUS
  61. #define DO_POPUP_KIND
  62. #define DO_TAB_KIND
  63. #endif    // _GTLAYOUT_GLOBAL_H
  64.  
  65.  
  66. /*****************************************************************************/
  67.  
  68.  
  69.     // Stuff from amiga.lib that we want to declare stdargs/regargs
  70.  
  71. APTR __stdargs __asm AsmCreatePool(register __d0 ULONG MemFlags,register __d1 ULONG PuddleSize,register __d2 ULONG ThreshSize,register __a6 struct ExecBase *SysBase);
  72. VOID __stdargs __asm AsmDeletePool(register __a0 APTR PoolHeader,register __a6 struct ExecBase *SysBase);
  73. APTR __stdargs __asm AsmAllocPooled(register __a0 APTR PoolHeader,register __d0 ULONG Size,register __a6 struct ExecBase *SysBase);
  74. VOID __stdargs __asm AsmFreePooled(register __a0 APTR PoolHeader,register __a1 APTR Memory,register __d0 ULONG MemSize,register __a6 struct ExecBase *SysBase);
  75.  
  76.  
  77. /*****************************************************************************/
  78.  
  79.  
  80.     // Scan an Exec list
  81.  
  82. #define SCANLIST(l,n)    for(n = (APTR)((struct MinList *)l) -> mlh_Head; \
  83.             ((struct MinNode *)n) -> mln_Succ; \
  84.             n = (APTR)((struct MinNode *)n) -> mln_Succ)
  85.  
  86.     // Scan the objects of a group
  87.  
  88. #define SCANGROUP(g,n)    for(n = (APTR)g -> Special . Group . ObjectList . mlh_Head; \
  89.             ((struct MinNode *)n) -> mln_Succ; \
  90.             n = (APTR)((struct MinNode *)n) -> mln_Succ)
  91.  
  92.     // Scan the objects of a group, only allowing active pages
  93.  
  94. #define SCANPAGE(g,n,p) for(p = 0, n = (APTR)g -> Special . Group . ObjectList . mlh_Head; \
  95.             ((struct MinNode *)n) -> mln_Succ; \
  96.             n = (APTR)((struct MinNode *)n) -> mln_Succ) \
  97.             if ((p++ == g -> Special . Group . ActivePage) || !g -> Special . Group . Paging)
  98.  
  99.     // Get an object pointer from a gadget pointer
  100.  
  101. #define GETOBJECT(g,n)    ((n = (ObjectNode *)g -> UserData) && (n -> Host == g) && (n -> PointBack == n))
  102.  
  103.  
  104. /*****************************************************************************/
  105.  
  106.  
  107. #ifdef DO_PASSWORD_KIND
  108. #define TEST_PASSWORD_KIND(n) || (n -> Type == PASSWORD_KIND)
  109. #else
  110. #define TEST_PASSWORD_KIND(n) || (FALSE)
  111. #endif
  112.  
  113. #ifdef DO_FRACTION_KIND
  114. #define TEST_FRACTION_KIND(n) || (n -> Type == FRACTION_KIND)
  115. #else
  116. #define TEST_FRACTION_KIND(n) || (FALSE)
  117. #endif
  118.  
  119.     // Is an object derived from STRING_KIND?
  120.  
  121. #define LIKE_STRING_KIND(n)    ((n -> Type == STRING_KIND) TEST_PASSWORD_KIND(n) TEST_FRACTION_KIND(n))
  122.  
  123.  
  124. /*****************************************************************************/
  125.  
  126.  
  127. typedef UBYTE BOOLEAN;
  128.  
  129. #define INCREMENTER_KIND    42
  130. #define PICKER_KIND        43
  131. #define GROUP_KIND        44
  132.  
  133. #define LAPR_Gadget        TAG_USER+100
  134. #define LAPR_Object        TAG_USER+101
  135.  
  136. typedef struct GaugeExtra
  137. {
  138.     LONG             InfoLength;
  139.     STRPTR             InfoText;
  140.     BOOLEAN             NoTicks;
  141.     BOOLEAN             Discrete;
  142.     WORD             LastPercentage;
  143. } GaugeExtra;
  144.  
  145. typedef struct TapeDeckExtra
  146. {
  147.     struct Image        *ButtonImage;
  148.     LONG             ButtonWidth,
  149.                  ButtonHeight;
  150.     BOOLEAN          ButtonType,
  151.                  Toggle,
  152.                  Pressed,
  153.                  Smaller,
  154.                  Tick;
  155. } TapeDeckExtra;
  156.  
  157. typedef struct ButtonExtra
  158. {
  159.     struct Image        *ButtonImage;
  160.     STRPTR             KeyStroke;
  161.     STRPTR            *Lines;
  162.     UBYTE             LineCount;
  163.  
  164.     BOOLEAN          ReturnKey;
  165.     BOOLEAN          EscKey;
  166.     BOOLEAN          ExtraFat;
  167.     BOOLEAN             DefaultCorrection;
  168.     BOOLEAN             Smaller;
  169. } ButtonExtra;
  170.  
  171. typedef struct BarExtra
  172. {
  173.     struct ObjectNode    *Parent;
  174.     BOOLEAN          FullSize;
  175. } BarExtra;
  176.  
  177. typedef struct BoxExtra
  178. {
  179.     struct ObjectNode    *Parent;
  180.     STRPTR            *Labels;
  181.     STRPTR            *Lines;
  182.     BYTE             AlignText;
  183.     WORD             MaxSize;
  184.     BOOLEAN          DrawBox;
  185.     BOOLEAN          ReserveSpace;
  186. } BoxExtra;
  187.  
  188. typedef struct FrameExtra
  189. {
  190.     UWORD             InnerWidth;
  191.     UWORD             InnerHeight;
  192.     struct Hook        *RefreshHook;
  193.     BOOLEAN          DrawBox;
  194. } FrameExtra;
  195.  
  196. typedef struct PickerExtra
  197. {
  198.     struct Gadget        *Parent;
  199.     struct Image        *Image;
  200. } PickerExtra;
  201.  
  202. typedef struct IncrementerExtra
  203. {
  204.     struct Gadget        *Parent;
  205.     struct Image        *Image;
  206.     LONG             Amount;
  207. } IncrementerExtra;
  208.  
  209. typedef struct GroupExtra
  210. {
  211.     struct MinList         ObjectList;
  212.     struct ObjectNode    *ParentGroup;
  213.     UWORD             ExtraLeft;
  214.     UWORD             ExtraTop;
  215.     LONG             MaxOffset;
  216.     LONG             MaxSize;
  217.     ULONG             ActivePage;
  218.     BOOLEAN          Horizontal;
  219.     BOOLEAN          Paging;
  220.     BOOLEAN          Spread;
  221.     BOOLEAN          SameSize;
  222.     BOOLEAN          LastAttributes;
  223.     BOOLEAN          Visible;
  224.     BOOLEAN             Frame;
  225.     BOOLEAN             IndentX,
  226.                  IndentY;
  227.     BOOLEAN             NoIndent;
  228. } GroupExtra;
  229.  
  230. typedef struct ListExtra
  231. {
  232.     struct List        *Labels;
  233.     struct Gadget        *Link;
  234.     LONG             LinkID;
  235.     struct Hook        *CallBack;
  236.     LONG             AutoPageID;
  237.     STRPTR            *ExtraLabels;
  238.     UWORD             ExtraLabelWidth;
  239.     UWORD             MaxPen;
  240.     UWORD             MaxGrowX,MaxGrowY;
  241.     UWORD             MinChars,MinLines;
  242.     struct TextAttr        *TextAttr;
  243.     WORD             FixedGlyphWidth,
  244.                  FixedGlyphHeight;
  245.     BOOLEAN          ReadOnly;
  246.     BOOLEAN          CursorKey;
  247.     BOOLEAN          AllocatedList;
  248.     BOOLEAN             LockSize;
  249.     BOOLEAN             SizeLocked;
  250.     BOOLEAN             ResizeX;
  251.     BOOLEAN             ResizeY;
  252.     BOOLEAN             FlushLabelLeft;
  253.     BOOLEAN             IgnoreListContents;
  254. } ListExtra;
  255.  
  256. typedef struct RadioExtra
  257. {
  258.     STRPTR            *Choices;
  259.     UWORD             LabelWidth;
  260.     UBYTE             TitlePlace;
  261.     LONG             AutoPageID;
  262.     BOOLEAN             TabKey;
  263. } RadioExtra;
  264.  
  265. typedef struct TextExtra
  266. {
  267.     STRPTR             Text;
  268.     struct Gadget        *Picker;
  269.     UWORD             Len;
  270.     BOOLEAN          Border;
  271.     BOOLEAN          CopyText;
  272.     BOOLEAN          UsePicker;
  273.     UBYTE             Justification;
  274.     BOOLEAN             LockSize;
  275.     BOOLEAN             SizeLocked;
  276. } TextExtra;
  277.  
  278. typedef struct NumberExtra
  279. {
  280.     LONG             Number;
  281.     BOOLEAN          Border;
  282.     UBYTE             Justification;
  283.     STRPTR             Format;
  284. } NumberExtra;
  285.  
  286. typedef struct CycleExtra
  287. {
  288.     STRPTR            *Choices;
  289.     LONG             AutoPageID;
  290.     BOOLEAN             TabKey;
  291. } CycleExtra;
  292.  
  293. typedef struct PalExtra
  294. {
  295.     UBYTE            *ColourTable;
  296.     UBYTE            *TranslateBack;
  297.     struct Gadget        *Picker;
  298.     UWORD             Depth;
  299.     UWORD             NumColours;
  300.     UWORD             IndicatorWidth;
  301.     BOOLEAN          SmallPalette;
  302.     BOOLEAN             UsePicker;
  303. } PalExtra;
  304.  
  305. typedef struct SliderExtra
  306. {
  307.     STRPTR             LevelFormat;
  308.     DISPFUNC         DispFunc;
  309.     LONG             MaxLevelLen;
  310.     LONG             LevelWidth;
  311.     STRPTR             OriginalLabel;
  312.     UBYTE             LevelPlace;
  313.     BOOLEAN          FullLevelCheck;
  314. } SliderExtra;
  315.  
  316. typedef struct StringExtra
  317. {
  318.     struct LayoutHandle    *LayoutHandle;
  319.     struct Hook        *HistoryHook;
  320.     ULONG             MaxHistoryLines;
  321.     ULONG             NumHistoryLines;
  322.     struct Node        *CurrentNode;
  323.  
  324.     STRPTR             String;
  325.     LONG             MaxChars;
  326.     struct Hook        *EditHook;
  327.     struct Gadget        *Picker;
  328.     STRPTR             Backup;
  329.     STRPTR             RealString;
  330.     STRPTR             Original;
  331.     LONG             LinkID;
  332.     UBYTE             Justification;
  333.     BOOLEAN          LastGadget;
  334.     BOOLEAN          UsePicker;
  335.     BOOLEAN             Activate;
  336. } StringExtra;
  337.  
  338. typedef struct IntegerExtra
  339. {
  340.     struct LayoutHandle    *LayoutHandle;
  341.     struct Hook        *HistoryHook;
  342.     ULONG             MaxHistoryLines;
  343.     ULONG             NumHistoryLines;
  344.     struct Node        *CurrentNode;
  345.  
  346.     LONG             Number;
  347.     LONG             MaxChars;
  348.     struct Hook        *EditHook;
  349.     UBYTE             Justification;
  350.     BOOLEAN          LastGadget;
  351.     BOOLEAN          UseIncrementers;
  352.     BOOLEAN             CustomHook;
  353.  
  354.     struct Gadget        *LeftIncrementer;
  355.     struct Gadget        *RightIncrementer;
  356.  
  357.     struct Hook        *IncrementerHook;
  358.     BOOLEAN             Activate;
  359. } IntegerExtra;
  360.  
  361. typedef struct ScrollerExtra
  362. {
  363.     WORD             Visible,
  364.                  ArrowSize;
  365.     BOOLEAN          RelVerify,
  366.                  Immediate,
  367.                  Arrows,
  368.                  Vertical,
  369.                  Thin;
  370. } ScrollerExtra;
  371.  
  372. typedef struct LevelExtra
  373. {
  374.     struct LayoutHandle    *Handle;
  375.     LONG             Min,
  376.                  Max,
  377.                  Level,
  378.                  Plus;
  379.     STRPTR             LevelFormat;
  380.     struct Image        *LevelImage;
  381.     DISPFUNC         DispFunc;
  382.     struct Hook         CustomHook;
  383.     LONG             MaxLevelWidth,
  384.                  MidOffset,
  385.                  LevelPlace;
  386.     BOOL             FullLevelCheck;
  387. } LevelExtra;
  388.  
  389. typedef struct BOOPSIExtra
  390. {
  391.     struct Library        *ClassBase;
  392.     Class            *ClassInstance;
  393.     STRPTR             ClassName;
  394.     STRPTR             ClassLibraryName;
  395.     struct TagItem        *ClassTags;
  396.     ULONG             TagCurrent,
  397.                  TagTextAttr,
  398.                  TagDrawInfo,
  399.                  TagLink,
  400.                  TagScreen;
  401.     LONG             Link;
  402.     WORD             ExactWidth,
  403.                  ExactHeight;
  404.     WORD             RelFontHeight;
  405.     struct ObjectNode    *Parent;
  406.     struct Hook        *ActivateHook;
  407.     BOOLEAN             FullWidth,
  408.                  FullHeight;
  409. } BOOPSIExtra;
  410.  
  411. typedef struct PopupExtra
  412. {
  413.     STRPTR            *Choices;
  414.     LONG             AutoPageID;
  415.     BOOLEAN             TabKey;
  416. } PopupExtra;
  417.  
  418. typedef struct TabExtra
  419. {
  420.     STRPTR            *Choices;
  421.     LONG             AutoPageID;
  422.     struct ObjectNode    *Parent;
  423.     BOOLEAN             TabKey;
  424.     BOOLEAN             FullWidth;
  425. } TabExtra;
  426.  
  427. typedef struct ObjectNode
  428. {
  429.     struct MinNode         Node;
  430.     struct Gadget        *Host;
  431.     struct ObjectNode    *PointBack;
  432.     STRPTR             Label;
  433.     LONG             ID;
  434.     UBYTE             Type;
  435.     BYTE             LabelPlace;
  436.     BOOLEAN          Disabled;
  437.     BYTE             ObjectPlace;
  438.     LONG             Min;
  439.     LONG             Max;
  440.     LONG             Current;
  441.     UWORD             Left;
  442.     UWORD             Top;
  443.     UWORD             Width;
  444.     UWORD             Height;
  445.     UWORD             LabelWidth;
  446.     UWORD             Lines;
  447.     UWORD             Chars;
  448.     WORD             ExtraSpace;
  449.     BOOLEAN          NoKey;
  450.     BOOLEAN          HighLabel;
  451.     BOOLEAN          GroupIndent;
  452.     BOOLEAN          PageSelector;
  453.     UBYTE             Key;
  454.     UBYTE             StorageType;
  455.     WORD             LabelChars;
  456.     APTR             Storage;
  457.  
  458.     union
  459.     {
  460.         GaugeExtra        Gauge;
  461.         TapeDeckExtra        TapeDeck;
  462.         ButtonExtra        Button;
  463.         BarExtra        Bar;
  464.         BoxExtra        Box;
  465.         FrameExtra        Frame;
  466.         PickerExtra        Picker;
  467.         IncrementerExtra    Incrementer;
  468.         GroupExtra        Group;
  469.         ListExtra        List;
  470.         RadioExtra        Radio;
  471.         TextExtra        Text;
  472.         NumberExtra        Number;
  473.         CycleExtra        Cycle;
  474.         PalExtra        Palette;
  475.         SliderExtra        Slider;
  476.         StringExtra        String;
  477.         IntegerExtra        Integer;
  478.         ScrollerExtra        Scroller;
  479.         LevelExtra        Level;
  480.         BOOPSIExtra        BOOPSI;
  481.         PopupExtra        Popup;
  482.         TabExtra        Tab;
  483.     } Special;
  484. } ObjectNode;
  485.  
  486. typedef struct LayoutHandle
  487. {
  488.         // WARNING: Beginning of this structure must match the definition in gtlayout.h!
  489.  
  490.     struct Screen        *Screen;
  491.     struct DrawInfo     *DrawInfo;
  492.     struct Window        *Window;
  493.     APTR             VisualInfo;
  494.     struct Image        *AmigaGlyph,
  495.                 *CheckGlyph;
  496.     APTR             UserData;
  497.     struct Menu        *Menu;
  498.  
  499.         // End of public part
  500.  
  501.     struct Screen        *PubScreen;
  502.     struct MsgPort        *MsgPort;
  503.     struct Gadget        **GadgetArray;
  504.     struct Gadget        *Previous;
  505.     struct Gadget        *List;
  506.     ULONG             IDCMP;
  507.  
  508.         // BOOPSI support
  509.  
  510.     Object            *BOOPSIPrevious;
  511.     Object            *BOOPSIList;
  512.  
  513.         // Incrementers
  514.  
  515.     ObjectNode        *ActiveIncrementer;
  516.     WORD             IncrementerCountdown;
  517.     WORD             IncrementerAccelerate;
  518.     LONG             IncrementerIncrement;
  519.  
  520.         // Cached from DrawInfo structure
  521.  
  522.     UWORD             TextPen;
  523.     UWORD             BackgroundPen;
  524.     UWORD             ShadowPen;
  525.     UWORD             ShinePen;
  526.     UWORD             AspectX;
  527.     UWORD             AspectY;
  528.  
  529.         // Double-click support
  530.  
  531.     ULONG             ClickSeconds;
  532.     ULONG             ClickMicros;
  533.     ObjectNode        *ClickObject;
  534.  
  535.     struct Hook        *LocaleHook;
  536.     struct TextAttr     *TextAttr;
  537.     struct TextAttr     *InitialTextAttr;
  538.     struct TTextAttr     CopyTextAttr;
  539.     struct RastPort      RPort;
  540.     APTR             Pool;
  541.     UWORD             GlyphWidth;
  542.     UWORD             InterWidth;
  543.     UWORD             InterHeight;
  544.     LONG             Count;
  545.     LONG             Index;
  546.     LONG             MaxID;
  547.     ObjectNode        *TopGroup;
  548.     ObjectNode        *CurrentGroup;
  549.     ObjectNode        *EscKey;
  550.     ObjectNode        *ReturnKey;
  551.     ObjectNode        *CursorKey;
  552.     ObjectNode        *GrowView;
  553.     ObjectNode        *ResizeView;
  554.     ObjectNode        *TabKey;
  555.     ObjectNode        *ActiveString;
  556. #ifdef DO_FRACTION_KIND
  557.     struct Hook         FracEditHook;
  558. #endif
  559. #ifdef DO_PASSWORD_KIND
  560.     struct Hook         PasswordEditHook;
  561. #endif
  562. #ifdef DO_HEXHOOK
  563.     struct Hook         HexEditHook;
  564. #endif
  565.     struct Hook         DefaultEditHook;
  566.     struct Hook        *StandardEditHook;
  567.     struct Hook         BackfillHook;
  568.     struct BitMap         BackfillBitMap;
  569.  
  570. #ifdef DO_PICKSHORTCUTS
  571.     UBYTE             Keys[256];
  572. #endif
  573.  
  574.     struct Hook        *HelpHook;        // Hook to call when help key is pressed
  575.     LONG             MaxPen;
  576.  
  577.     BOOLEAN          AutoRefresh;
  578.     BOOLEAN          CloseFont;
  579.     BOOLEAN          Failed;
  580.     BOOLEAN          Rescaled;
  581.     BOOLEAN          AutoActivate;
  582.     BOOLEAN          MoveToWindow;
  583.     BOOLEAN             NeedDelay;
  584.     BOOLEAN             RawKeyFilter;
  585.  
  586. #ifdef DO_CLONING
  587.     BOOLEAN          CloningPermitted;    // Genetic engineering?
  588.     BOOLEAN          ExactClone;        // Make an exact copy, i.e. preserve all colours
  589.     BOOL             SimpleClone;        // Just a simple clone, please
  590.     struct CloneExtra    *CloneExtra;        // Screen cloning information
  591. #endif
  592.  
  593.     struct Window        *Parent;        // Parent of this window
  594.     BOOLEAN             BlockParent;
  595.     BOOL             ExitFlush;
  596.  
  597.     BOOLEAN             SizeVerified;
  598.     WORD             SizeWidth,
  599.                  SizeHeight;
  600.  
  601.     BOOLEAN             FlushLeft,
  602.                  FlushTop;
  603. #ifdef DO_LEVEL_KIND
  604.     ObjectNode        *CurrentLevel;
  605. #endif    /* DO_LEVEL_KIND */
  606.  
  607.     struct TTextAttr     FixedFont;
  608.  
  609.     struct LayoutHandle    *PointBack;
  610.  
  611.     LONG             GroupID;
  612. } LayoutHandle;
  613.  
  614. #define PHANTOM_GROUP_ID    -10000    // Phantom groups, i.e those without proper
  615.                     // IDs start with this ID
  616.  
  617. /*****************************************************************************/
  618.  
  619.  
  620.     // Window locking
  621.  
  622. typedef struct LockNode
  623. {
  624.     struct MinNode         MinNode;
  625.     struct Window        *Window;
  626.     LONG             Count;
  627.     ULONG             OldIDCMPFlags;
  628.     struct Requester     Requester;
  629.     LONG             MinWidth;
  630.     LONG             MinHeight;
  631.     LONG             MaxWidth;
  632.     LONG             MaxHeight;
  633. } LockNode;
  634.  
  635.  
  636. /*****************************************************************************/
  637.  
  638.  
  639.     // Image class extension
  640.  
  641. typedef struct ImageInfo
  642. {
  643.     UWORD             ImageType,    // Type
  644.  
  645.                  GlyphWidth,    // Size
  646.                  GlyphHeight,
  647.  
  648.                  LineCount;    // Number of lines below
  649.  
  650.     STRPTR            *Lines;        // Text lines
  651.     STRPTR             KeyStroke;    // Points to char that acts as keystroke identifier
  652.  
  653.     STRPTR             Label;        // Single label if any
  654.  
  655.     BOOLEAN             Emboss;    // Emboss the bevel box
  656. } ImageInfo;
  657.  
  658.     // Image class extension types
  659.  
  660. #define IIA_ImageType    (TAG_USER+739)
  661. #define IIA_GlyphWidth    (TAG_USER+740)
  662. #define IIA_GlyphHeight    (TAG_USER+741)
  663. #define IIA_Lines    (TAG_USER+742)
  664. #define IIA_LineCount    (TAG_USER+743)
  665. #define IIA_KeyStroke    (TAG_USER+744)
  666. #define IIA_Emboss    (TAG_USER+745)
  667. #define IIA_Label    (TAG_USER+746)
  668.  
  669.     // Supported image class extension types
  670.  
  671. typedef enum ImageTypes
  672. {
  673.     IMAGECLASS_PICKER,
  674.     IMAGECLASS_LEFTINCREMENTER,
  675.     IMAGECLASS_RIGHTINCREMENTER,
  676.     IMAGECLASS_BACKWARD,
  677.     IMAGECLASS_FORWARD,
  678.     IMAGECLASS_PREVIOUS,
  679.     IMAGECLASS_NEXT,
  680.     IMAGECLASS_RECORD,
  681.     IMAGECLASS_PLAY,
  682.     IMAGECLASS_STOP,
  683.     IMAGECLASS_PAUSE,
  684.     IMAGECLASS_REWIND,
  685.     IMAGECLASS_EJECT,
  686.     IMAGECLASS_MULTILINEBUTTON
  687. } ImageTypes;
  688.  
  689.  
  690. /*****************************************************************************/
  691.  
  692.  
  693.     // Level image class
  694.  
  695. typedef struct LevelImageInfo
  696. {
  697.     WORD         KnobWidth,    // Width of knob (actually half of it)
  698.              KnobTop,    // Distance from knob to level body
  699.              LevelHeight;    // Height of level body
  700.  
  701.     LONG         Position,    // Position of knob on level body
  702.              Max,        // Maximum value
  703.              Current;    // Current value
  704.  
  705.     struct DrawInfo *DrawInfo;    // Handy
  706. } LevelImageInfo;
  707.  
  708.     // Level class control tags
  709.  
  710. #define LVIA_Current    (TAG_USER+0xF000)    // Current value
  711. #define LVIA_Max    (TAG_USER+0xF001)    // Maximum value
  712. #define LVIA_DrawInfo    (TAG_USER+0xF002)    // Pens, etc.
  713. #define LVIA_Position    (TAG_USER+0xF003)    // Position of knob
  714. #define LVIA_KnobWidth    (TAG_USER+0xF004)    // Width of knob
  715. #define LVIA_FontWidth    (TAG_USER+0xF005)    // Reference font width
  716.  
  717.  
  718. /*****************************************************************************/
  719.  
  720.  
  721. typedef enum StorageTypes
  722. {
  723.     STORAGE_BYTE,STORAGE_UBYTE,
  724.     STORAGE_WORD,STORAGE_UWORD,
  725.     STORAGE_LONG,STORAGE_ULONG,
  726.     STORAGE_STRPTR
  727. } StorageTypes;
  728.  
  729.  
  730. /*****************************************************************************/
  731.  
  732.  
  733.     // A single colour in 96 bit precision
  734.  
  735. struct ColourTriplet
  736. {
  737.     ULONG            Red,        // 32 bits each
  738.                 Green,
  739.                 Blue;
  740. };
  741.  
  742.     // A colour table ready to submit to LoadRGB32
  743.  
  744. struct ColourRecord
  745. {
  746.     UWORD            NumColours,    // Number of colours in this chunk
  747.                 FirstColour;    // First colour entry to set
  748.  
  749.     struct ColourTriplet    Triplets[0];    // Table entries
  750.  
  751.     WORD            Arnold;     // Array terminator, needs to be set to zero
  752. };
  753.  
  754.     // Screen reproduction
  755.  
  756. struct CloneExtra
  757. {
  758.     struct Screen        *Screen;
  759.     LONG            *Pens;
  760.     UWORD            *ScreenPens;
  761.     UWORD             MinWidth,
  762.                  MinHeight,
  763.                  MaxWidth,
  764.                  MaxHeight,
  765.                  TotalPens;
  766.     UBYTE             Depth;
  767.     struct IBox         Bounds;
  768. };
  769.  
  770.  
  771. /*****************************************************************************/
  772.  
  773.  
  774. #define ITEMF_HasSub    (1 << 0)        // Next item is a subitem
  775. #define ITEMF_FirstSub    (1 << 1)        // This is the first subitem
  776. #define ITEMF_IsSub    (1 << 2)        // This is a subitem
  777. #define ITEMF_LastItem    (1 << 3)        // This is the last item
  778. #define ITEMF_IsBar    (1 << 4)        // This is a separator bar
  779. #define ITEMF_Command    (1 << 5)        // This item has a long command key sequence
  780.  
  781. typedef struct ItemNode
  782. {
  783.     struct MinNode     Node;
  784.     struct MenuItem     Item;
  785.     APTR         UserData;
  786.     ULONG         ID;            // Item ID
  787.  
  788.     UWORD         Flags;            // Flag bits as defined above
  789.     WORD         Left,            // Actual left edge
  790.              Top;            // Actual top edge
  791.     WORD         Width;            // Actual width
  792.     STRPTR         ExtraLabel;        // For long command sequence labels
  793.  
  794.     UWORD         Code;            // Message code
  795.     ULONG         Qualifier;        // Message qualifier
  796.     UBYTE         Char;            // ASCII code
  797.  
  798.     UWORD         MenuCode;        // Intuition menu code
  799. } ItemNode, *pItemNode;
  800.  
  801. typedef struct MenuNode
  802. {
  803.     struct MinNode     Node;
  804.     struct Menu     Menu;
  805.     APTR         UserData;
  806.     ULONG         ID;            // Item ID
  807.  
  808.     WORD         Width;            // Actual width
  809.  
  810.     UWORD         MenuCode;        // Intuition menu code
  811. } MenuNode, *pMenuNode;
  812.  
  813. typedef struct RootMenu
  814. {
  815.     APTR             Pool;        // Memory allocation
  816.     struct TextFont        *Font;        // Preferred item font
  817.     struct TextAttr        *TextAttr;    // What goes into the single items
  818.     struct TTextAttr     BoldAttr;    // Same as above, just in boldface
  819.     struct DrawInfo        *DrawInfo;    // Screen drawing info
  820.     struct Screen        *Screen;    // The screen we are building the menu for
  821.     struct RastPort         RPort;        // Dummy RastPort for font measuring
  822.  
  823.     WORD             ItemHeight;    // Default item height
  824.     UWORD             TextPen;    // Text rendering pen
  825.  
  826.     ULONG             CheckWidth,    // Size of the checkmark glyph
  827.                  CheckHeight,
  828.                  AmigaWidth,    // Size of the Amiga glyph
  829.                  AmigaHeight;
  830.  
  831.     struct MinList         MenuList;    // List of menus
  832.     struct MinList         ItemList;    // List of menu items
  833.  
  834.     LayoutHandle        *Handle;    // Layout handle if any
  835.     struct Hook        *LocaleHook;    // Localization, if no handle is provided
  836.  
  837.     struct MinNode         Node;        // The initial menu all the data is tied to
  838.     struct Menu         Menu;
  839.     APTR             UserData;
  840.     ULONG             ID;
  841.     WORD             Width;
  842.     UWORD             MenuCode;
  843. } RootMenu, *pRootMenu;
  844.  
  845.  
  846. /*****************************************************************************/
  847.  
  848.  
  849.     // Layer backfill hook support
  850.  
  851. struct LayerMsg
  852. {
  853.     ULONG            Layer;
  854.     struct Rectangle    Bounds;
  855. };
  856.  
  857.  
  858. /*****************************************************************************/
  859.  
  860.  
  861. typedef struct PopInfo
  862. {
  863.     STRPTR        *Labels;
  864.     LONG         NumLabels;
  865.     LONG         Active;
  866.     LONG         InitialActive;
  867.     UWORD         ActiveLen;
  868.  
  869.     UWORD         MarkLeft;
  870.     UWORD         MarkWidth;
  871.  
  872.     UWORD         LabelBase;
  873.     UWORD         LabelLeft;
  874.     UWORD         LabelTop;
  875.  
  876.     UWORD         LineTop;
  877.     UWORD         LineBase;
  878.  
  879.     UWORD         ArrowTop;
  880.     UWORD         ArrowWidth;
  881.     UWORD         ArrowHeight;
  882.  
  883.     LONG         MaxLen;
  884.     LONG         MaxWidth;
  885.  
  886.     UWORD         PopLeft;
  887.     UWORD         PopWidth;
  888.  
  889.     struct Window    *Window;
  890.     struct TextFont    *Font;
  891.  
  892.     UWORD         BoxLeft,BoxTop,
  893.              BoxWidth,BoxHeight;
  894.  
  895.     UWORD         BoxLines;
  896.  
  897.     UWORD         SingleWidth,
  898.              SingleHeight;
  899.  
  900.     LONG         TopMost;
  901.  
  902.     LONG         LastDrawn;
  903.     STRPTR         LastLabelDrawn;
  904.  
  905.     UWORD         MenuText,MenuBack;
  906.     UWORD         MenuTextSelect,MenuBackSelect;
  907.  
  908.     UBYTE         Flags;
  909. } PopInfo;
  910.  
  911. #define PIA_Labels    (TAG_USER+0x80000)
  912. #define PIA_Active    (TAG_USER+0x80001)
  913. #define PIA_Font    (TAG_USER+0x80002)
  914. #define PIA_Highlight    (TAG_USER+0x80003)
  915.  
  916.  
  917. /*****************************************************************************/
  918.  
  919.  
  920. typedef struct TabEntry
  921. {
  922.     struct BitMap    *BitMap;
  923.     UWORD         Left;
  924. } TabEntry;
  925.  
  926. typedef struct TabInfo
  927. {
  928.     struct BitMap    *BitMap;
  929.     struct RastPort     RPort;
  930.     PLANEPTR     Mask;
  931.  
  932.     TabEntry    *Tabs;
  933.     WORD         Count;
  934.     WORD         Current;
  935.     WORD         Initial;
  936.  
  937.     UWORD         Thick;
  938.     UWORD         TabWidth;
  939.     UWORD         TabHeight;
  940.  
  941.     WORD         Offset;
  942. } TabInfo;
  943.  
  944. #define TIA_Labels    (TAG_USER+0x90000)
  945. #define TIA_Font    (TAG_USER+0x90001)
  946. #define TIA_Screen    (TAG_USER+0x90002)
  947. #define TIA_Index    (TAG_USER+0x90003)
  948. #define TIA_DrawInfo    (TAG_USER+0x90004)
  949. #define TIA_SizeType    (TAG_USER+0x90005)
  950.  
  951.  
  952. /*****************************************************************************/
  953.  
  954.  
  955. #endif
  956.